<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script type="text/javascript">
    // 这里是的做法是新建一个空数组[]，在使用它的slice()属性。当然，你也可以通过Array.prototype.slice来调用同一个函数
    // 没看懂
    function f() {
        var args = [].slice.call(arguments);
        return args.reverse();
    }
    console.log(f(1,2,3,4));
</script>

<script>
    // 使用toString方法来查看数组和arguments对象的区别
    console.log(Object.prototype.toString.call({}));
    console.log(Object.prototype.toString.call([]));

    // 在这里，tostring()方法必须要来自于object构造器中的prototype属性。直接调用Array的tostring方法是不行的，因为在Array对象中，这个方法已经出于其他目的被重写了:
    console.log([1,2,3].toString());
    // 也可以写为
    console.log(Array.prototype.toString.call([1,2,3]));

    // 我们还可以尝试单独为Object.prototype.toString设置一个引用变量，以便让代码变得更短一些  ->代码报错
    var toStr = Object.prototype.toString;
    // console.log(
    //     (function(x){
    //         return toStr.call(arguments);
    //     })();
    // )

    // 同样，该方法也适用于DOM元素
    console.log(toStr.call(document.body));
</script>
</body>
</html>
